Graphics processing systems are used to render images, e.g. for display on a screen. Image data is received at a graphics processing system, which transforms the image data into screen space using well-known methods. The transformed image data describes primitives which are to be rendered by the graphics processing system, wherein each of the primitives comprises one or more fragments which correspond to a respective one or more sample positions of a rendering space of the graphics processing system. In some examples, a single sample position may correspond to a pixel position of the final rendered image, but in other examples, more than one (e.g. four) sample positions may correspond to each pixel position. Some graphics processing systems are tile-based in the sense that they comprise a rendering space which is subdivided into a plurality of regions (herein referred to as “tiles”), which each comprise a plurality of sample positions. Tiles are usually rectangular (wherein the term “rectangular” is used herein to include square), but they may be other shapes such as triangular or hexagonal. The rendering space may correspond to an image for display on a screen, but other render targets, such as texture data in memory, are also possible. Tiles can be various sizes, for example tiles may be 16×16 pixels. In one example of a screen high resolution image there are 1280×1024 pixels. Therefore, as an example, such a high resolution image may be sub-divided into 5120 tiles, each comprising 16×16 pixels.
A bounding box is determined for each primitive defining a group of one or more tiles which include all of the fragments of the primitive within the rendering space. A tiling unit processes a primitive for each tile inside the primitive's bounding box to determine whether the primitive is present within the tile (i.e. at least partially overlapping the tile). Primitive identifiers of the primitives which are present within a tile are added into a display list for that tile. This facilitates further processing to be performed on a tile-by-tile basis in a tile-based graphics processing system because for each tile, the respective display list indicates which primitives are needed in order to process the tile. The further processing of the primitives that are present within a tile often relies on the submission order of the primitives. For example, the processing of translucent primitives may be reliant on the primitives being submitted in a back-to-front order. A graphics processing system typically relies on an application submitting primitives in the correct order, and as such the tiling process should not alter the submission order of the primitives from that in which the primitives are received. That is, the original submission order of primitives has to be preserved in each of the display lists for the tiles. In some systems, the primitives are organised into primitive blocks, wherein each primitive block is associated with a sequence number, which can be used to ensure that the order of the primitive blocks is maintained.
The tiling unit may include a tiling engine pipe which processes a primitive block of primitives at a time to determine which tiles the primitives within the primitive block are present within. Using a single tiling engine pipe in the tiling unit helps to ensure that the order of the primitives is not altered by the tiling process, but as the number of primitives in a scene increases, and/or as the number of tiles in the rendering space increases, the amount of processing that is required to be performed by a single tiling engine pipe increases, and this may become a bottleneck in the tiling process.